package org.example.contronller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import kuaizu.common.param.StudentInfoListParam;
import kuaizu.common.tablepojo.Magor;
import lombok.RequiredArgsConstructor;

import org.example.mapper.plus.MagorMapper;
import org.example.pojo.*;

import org.example.service.UserService;
import org.example.validation.groups.Create;
import org.example.validation.groups.Login;

import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;


@RestController//表示交给Spring管理哦
@RequestMapping("/user")//配置映射路径
@Validated//开启数据校验
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;
    private final MagorMapper magorMapper;

    /**
     * 根据项目偏向和学校id查询所有学生信息
     * 学校id和项目偏向非必填,都不传默认查询全部
     * 分页参数必传->
     */
    @PostMapping("/all")
    @Transactional
    public Result list(@RequestBody @Validated StudentInfoListParam req) {
        return Result.success("查询成功", userService.SelectStudentList(req));
    }

    /**
     * 审核学生认证信息
     * 被审核人的openid
     * 审核人id
     * 姓名
     * 审核状态 true表示审核通过,false审核不通过
     * 审核信息 管理员自行填写
     *
     */
    @PostMapping("/auditstudent")
    @Transactional
    public Result audit(@RequestBody ReviewParam param) {
        return Result.success("审核成功", userService.reviewStudent(param));
    }


/**
 * 模糊查询专业信息
 * 根据专业名称关键字模糊查询专业信息
 */
@PostMapping("/majorlist")
public Result majorlist(@RequestBody MajorQueryParam param) {
    //根据专业名称模糊查询
    return Result.success("查询成功", magorMapper.selectList(new
            QueryWrapper<Magor>().like("major_name", param.getMajorName())));
}


    /**
     * 注册  目前只有赵哥有权限注册
     * 用户名 姓名 手机号 学校id 密码
     */
    @PostMapping("/register")
    public Result register(@RequestBody @Validated(Create.class) User user) {
        return Result.success("注册成功", userService.register(user));
    }

    /*
     * 登陆
     * 密码,学校id,用户名必填
     * 已完成,无需修改->
     * */
    @PostMapping("/login")
    public Result login(@RequestBody @Validated(Login.class) User user) {
        return Result.success("登陆成功", userService.login(user));
    }

    /*
     * 根据学校id查询学校所有用户
     * 已完成无需修改->
     * */
    @GetMapping("/list/{schoolId}")
    public Result list(@PathVariable Integer schoolId) {
        return Result.success("查询成功", userService.SelectBySchoolIdFormKuaiZu(schoolId));
    }

    /**
     * 查找学校 模糊匹配设置缓存3小时内请求的数据一样
     * 已完成无需修改
     */
    @GetMapping("/schoollist")
    public Result schoollist(String name) {
        return Result.success("查询成功", userService.SelectSchoolList(name));
    }

    /**
     * 学生审核状态修改
     * 被审核人openid
     * 审核人id
     * 认证信息 相当于备注或者拒绝状态
     * 审核状态
     * 已完成无需修改 审核学生统一用这个->
     */
    @PostMapping("/updatestart")
    @Transactional
    public Result update(@RequestBody @Validated UserProofStart user) {
        return Result.success("修改成功", userService.updateStudentStart(user));
    }

    /*
     * 修改密码
     * 用id和新密码
     * 不用改
     * */
    @PostMapping("/uppassword")
    @Transactional
    public Result uppassword(@RequestBody @Validated UpdatePassWord updatePassWord) {
        return Result.success("修改成功", userService.updatePassword(updatePassWord));
    }

    /**
     * 修改学生信息
     * 学校id
     * 专业id
     * 学生的openid
     * 全部必传 只需要修改学校和专业即可->
     *
     * */
    @PostMapping("/hou/updateUserInfo")
    @Transactional
    public Result updateUserInfo(@RequestBody @Validated UpdateUserInfoParam param) {
        userService.updateUserInfo(param);
        return Result.success("操作成功", "修改成功");
    }


    /*
     * 查询所有管理员信息
     * 已完成
     * */
    @GetMapping("/adminlist")
    @Transactional
    public Result adminlist() {
        return Result.success("查询成功", userService.adminlist());
    }


    /*
     * 删除指定学生
     * 被删除人openid
     *
     * */
    @PostMapping("/delectStudent")
    @Transactional
    public Result delectStudent(@RequestBody @Validated DelectStudentParam param) {
        return Result.success("删除成功", userService.delectStudent(param));
    }


    /*
     * 查询所有学校的注册人数
     * */


    /**
     * 审核人员
     * @param param 审核参数
     * @return 审核结果
     */
    @PostMapping("/auditstaff")
    @Transactional
    public Result auditStaff(@RequestBody @Validated TalentAuditParam param) {
        return Result.success("审核成功", userService.auditStaff(param));
    }


}
